package com.my.code.phaser;

import java.util.concurrent.Phaser;

/**
 * 运动员类<br/>
 *  Phaser有phase和party两个重要状态，
 *  phase表示阶段，party表示每个阶段的线程个数，
 *  只有每个线程都执行了phaser.arriveAndAwaitAdvance();
 *  才会进入下一个阶段，否则阻塞等待。
 */
public class Runner implements Runnable {

    private Phaser phaser;

    public Runner(Phaser phaser) {
        this.phaser = phaser;
    }

    @Override
    public void run() {

        //参加预赛
        System.out.println("选手-" + Thread.currentThread().getName() + ":参加预赛");
        //预赛阶段-----执行这个方法的话会等所有的选手都完成了之后再继续下面的方法
        phaser.arriveAndAwaitAdvance();

        //参加初赛
        System.out.println("选手-" + Thread.currentThread().getName() + ":参加初赛");
        //初赛阶段
        phaser.arriveAndAwaitAdvance();

        //参加决赛
        System.out.println("选手-" + Thread.currentThread().getName() + ":参加决赛");
        //决赛阶段
        phaser.arriveAndAwaitAdvance();

    }
}
